<?php
/**
 * @version 1.0
 * @author jonathan <jo.link.noir@gmail.com>
 * @date 13-03-2010
 */
class U1_Display_Move
{
	/**
	 * @param SW_Planet_Element $start
	 * @param SW_Planet_Element $end
	 * @return string
	 */
	static public function getHeader(SW_Planet_Element $start, SW_Planet_Element $end)
	{
		//div fermer dans getFooter
		return '<div class="reportMove"><div class="headerMove"><p>'.
				U1_Display_Player::getClickedMessageSend($start->getRefUser()).' '.$start->targetGlue()
			.' >>> '.
				$end->targetGlue().' '.U1_Display_Player::getClickedMessageSend($end->getRefUser())
			.'</p></div>';
	}

	/**
	 * @param bool $generate = false
	 * @return string
	 */
	static public function getFooter($generate = false)
	{
		//ferme le div de getHeader
		return $generate
			? '<p class="generationReportMove">Générer le message pour le forum</p></div>'
			: '</div>';
	}

	/**
	 * @param string $indexStruct
	 * @param array $elements : {group => nombre, ...}
	 * @return string
	 */
	static public function getMessageStructure($indexStruct, array $elements)
	{
		$display = U1_Display_Structure::getdisplay($indexStruct);

		$message = '<table class="report"><caption>'.$display->getNameStruct().'</caption><thead><tr><th>Type</th><th>Nombre</th></tr></thead><tfoot><tr><th>Type</th><th>Nombre</th></tr></tfoot><tbody>';

		foreach ($elements as $id => $count)
			$message .= '<tr><td>'.$display->getName($id).'</td><td>'.$count.'</td></tr>';

		return $message.'</tbody></table>';
	}

	/**
	 * @param SW_Planet_Element $start
	 * @param SW_Planet_Element $end
	 * @param int $percent
	 * @param string $struct : {index => {element_group => nombre, ...}, ...}
	 * @param int $deadProbe
	 * @return string
	 */
	static public function getReportSpy(SW_Planet_Element $start, SW_Planet_Element $end, $percent, array $struct, $deadProbe)
	{
		$message = self::getHeader($start, $end).'<p>Probabilité d\'espionnage : '.$percent.'%</p>';
		foreach ($struct as $indexStruct => $elements)
			$message .= self::getMessageStructure($indexStruct, $elements);
		return $message.'<p>'.$deadProbe.' sonde(s) ont été détruite(s)</p>'.self::getFooter(true);
	}

	/**
	 * @param SW_Planet_Element $start
	 * @param SW_Planet_Element $end
	 * @param string $confrontation
	 * @param U1_Removable_Resource $resource = null
	 * @return string
	 */
	static public function getReportAttack(SW_Planet_Element $start, SW_Planet_Element $end, $confrontation, U1_Removable_Resource $resource = null)
	{
		$message = self::getHeader($start, $end).$confrontation;

		if ($resource)
			$message .= '<p>Les ressources suivantes ont été prises</p>'.self::getMessageStructure(U1_Resource::INDEX, $resource->getQuantities());

		return $message.self::getFooter(true);
	}

	/**
	 * @param SW_Planet_Element $start
	 * @param SW_Planet_Element $end
	 * @param SW_Units $units = null
	 * @param U1_Removable_Resource $resource = null
	 * @param bool $colonize = false
	 * @return string
	 */
	static public function getReportTransport(SW_Planet_Element $start, SW_Planet_Element $end, SW_Units $units = null, U1_Removable_Resource $resource = null, $colonize = false)
	{
		$message = self::getHeader($start, $end);

		if ($colonize)
			$message .= '<p>Una planète est colonisée</p>';

		if ($units)
		{
			$units = $units->toArray();
			if (!empty($units))
				$message .= '<p>Les vaisseaux suivants sont déposés</p>'.self::getMessageStructure(U1_Army::INDEX, $units);
		}

		if ($resource)
			$message .= '<p>Les ressources suivantes sont déposées</p>'.self::getMessageStructure(U1_Resource::INDEX, $resource->getQuantities());

		return $message.self::getFooter(true);
	}

	/**
	 * @param string $order
	 * @param bool $playerTarget : true pour message à destination de la planète attaquer
	 * @return string
	 */
	static public function getSujetMove($order, $playerTarget)
	{
		return $playerTarget
			?	(('attack' 		=== $order) ? 'Votre planète est attaquée.' :
				(('transport'	=== $order) ? 'Des ressources vous sont envoyées.' :
				(('spy'			=== $order) ? 'Quelqu\'un a éssayé de vous espionner.' :
				(('base'		=== $order) ? 'Une armé vous est envoyée.' :
				'pas d\'objet'
			))))
			:	(('base'		=== $order) ? 'Votre armé ce pose.' :
				(('attack'		=== $order) ? 'Rapport de bataille.' :
				(('transport'	=== $order) ? 'Transport de ressource.' :
				(('spy'			=== $order) ? 'Rapport d\'espionnage.' :
				(('colonize'	=== $order) ? 'Rapport de colonisation.' :
				'pas d\'objet'
			)))));
	}
}